package ningbo.OOP;

/**
 * @Author 宁铂
 * @Date 2021/7/8 19:52
 * @Version 1.0
 */
public class TestConstructor {
    /** 本类用于测试构造方法 */

    public static void main(String[] args) {

        /** 无参构造创建对象 */
        People people = new People();
        /** 含参构造创建对象 */
        People people1 = new People(3);
        /** 全参构造创建对象 */
        People people2 = new People("小胖子", 22, "男");

        /** 打印全参构造的属性/字段 */
        System.out.println(people2.name);
        System.out.println(people2.age);
        System.out.println(people2.gender);

        /** 打印含参构造的属性/字段 */
        System.out.println(people1.age);

        System.out.println(people.name);
        System.out.println(people.age);
        System.out.println(people.gender);

        people.eat();
    }
}

class People{
    String name;
    int age;
    String gender;

    /** 每个类默认存在无参构造
     *  构造方法格式:
     *  修饰符.类名(参数列表){方法体}
     *  每次创建对象时,都会触发对应的构造方法来创建对象(会自动执行构造方法内的代码),最先执行
     * */
    public People(){
        System.out.println("我是People的无参构造");
    }

    /** 方法的重载: 在同一个类中,方法名相同,参数列表不同就会触发方法的重载
     *  构造方法也存在重载的现象: 无参构造/含参构造/全参构造
     * */

    /** 创建一个含参构造
     *  如果提供了含参构造,默认无参构造会被覆盖
     *  如果想继续使用无参构造,就必须手动提供无参构造
     * */
    public People(int n){
        System.out.println("我是People的含参构造");
    }

    /** 创建全参构造 */
    public People(String name,int age,String gender){

        /** 全参构造可以给字段/成员变量赋值 */
        this.name = name;
        this.age = age;
        this.gender = gender;

        System.out.println("我是People的全参构造");
    }

    public void eat(){
        System.out.println("人是铁,饭是钢~");
    }
}
